﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using LeMigue.TeamPortal.Base.Biz.Interface;
using LeMigue.Scrum.Iterface.Model;
using LeMigue.TeamPortal.Base.View;
using LeMigue.Scrum.Iterface.Enum;
using LeMigue.TeamPortal.Base.Biz;

namespace LeMigue.TeamPortal.Dev.Biz
{
    public class DevScrumBoardBiz : IScrumBoardBiz
    {
        public Sprint SprintAtivo(Team team, int id)
        {
            //TODO: deixar o sprint que está trabalhando no cache?? problema de manter os objetos no cache também
            Sprint sprintAtual;
            if (id == 0)
            {
                IList<Sprint> sprints = new DevSprintBiz().Sprints;
                sprintAtual = sprints.SingleOrDefault(s => s.Atual);
                if (sprintAtual == null)
                    sprintAtual = sprints.SingleOrDefault(s => s.End == sprints.Max(sm => sm.End));
            }
            else
            {
                sprintAtual = new DevSprintBiz().Sprints.SingleOrDefault(s => s.Id == id);
                //TODO: tratar erro caso não encontre o sprint escolhido
            }

            //TODO: tratar o erro que terá quando não tiver uma data definida;

            return sprintAtual;
        }

        public IItemListBoardView ItemBoard(int? id)
        {
            throw new NotImplementedException();
        }

        public IList<IItemListBoardView> ListItemBoard(Sprint sprint)
        {
            List<IItemListBoardView> itensBacklog = sprint.Backlogs.Select(i => (IItemListBoardView)new ItemBacklogView(i)).ToList();

            itensBacklog.AddRange(sprint.Bugs.Select(i => (IItemListBoardView)new BugView(i)).ToList());

            return itensBacklog;
        }

        public IList<IItemListBoardView> ListItemBoard(IItemListBoardView itemBoard)
        {
            throw new NotImplementedException();
        }

        public IList<TaskView> Tasks(IItemListBoardView itemBoard, TaskState? state)
        {
            throw new NotImplementedException();
        }
    }
}
